#!/bin/bash
# 故障恢复系统启动脚本
# 生成时间: {{ ansible_date_time.iso8601 }}

set -e

# 配置变量
CONFIG_FILE="{{ failover_config_dir }}/config.yml"
HEALTH_CHECK_SCRIPT="{{ failover_home_dir }}/health_check.py"
FAILOVER_MANAGER="{{ failover_home_dir }}/failover_manager.py"
LOG_DIR="{{ failover_log_dir }}"
PID_FILE="{{ failover_data_dir }}/monitoring.pid"
LOG_FILE="$LOG_DIR/monitoring.log"

# 创建必要的目录
mkdir -p "$LOG_DIR"
mkdir -p "{{ failover_data_dir }}"

# 检查配置文件
if [ ! -f "$CONFIG_FILE" ]; then
    echo "错误: 配置文件不存在: $CONFIG_FILE" >&2
    exit 1
fi

# 检查脚本文件
if [ ! -f "$HEALTH_CHECK_SCRIPT" ]; then
    echo "错误: 健康检查脚本不存在: $HEALTH_CHECK_SCRIPT" >&2
    exit 1
fi

# 检查是否已经在运行
if [ -f "$PID_FILE" ]; then
    PID=$(cat "$PID_FILE")
    if kill -0 "$PID" 2>/dev/null; then
        echo "故障恢复系统已经在运行 (PID: $PID)"
        exit 0
    else
        echo "清理过期的PID文件"
        rm -f "$PID_FILE"
    fi
fi

echo "启动故障恢复系统..."
echo "配置文件: $CONFIG_FILE"
echo "日志文件: $LOG_FILE"
echo "PID文件: $PID_FILE"

# 启动健康检查循环
(
    while true; do
        echo "[$(date '+%Y-%m-%d %H:%M:%S')] 执行健康检查..." >> "$LOG_FILE"
        
        # 运行健康检查
        if python3 "$HEALTH_CHECK_SCRIPT" >> "$LOG_FILE" 2>&1; then
            echo "[$(date '+%Y-%m-%d %H:%M:%S')] 健康检查完成" >> "$LOG_FILE"
        else
            echo "[$(date '+%Y-%m-%d %H:%M:%S')] 健康检查失败" >> "$LOG_FILE"
        fi
        
        # 等待下次检查
        sleep {{ failover_health_check_interval | default(60) }}
    done
) &

# 保存PID
echo $! > "$PID_FILE"

echo "故障恢复系统已启动 (PID: $!)" 
echo "使用以下命令查看日志: tail -f $LOG_FILE"
echo "使用以下命令停止服务: {{ failover_scripts_dir }}/stop_monitoring.sh"